package cn.chi.base.service.impl;

import cn.chi.base.service.ICodeService;
import cn.chi.util.SmsUtils;
import cn.chi.util.StrUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

import java.util.Map;
import java.util.concurrent.TimeUnit;

@Service
public class CodeServiceImpl implements ICodeService {
    @Autowired
    private RedisTemplate redisTemplate;

    @Override
    public void sendCode(Map<String, String> map) {
        // 当手机在一分钟内申请验证码时静止申请
        String phone = map.get("phone");
        String codeType = map.get("codeType");
        // 通过工具类随机生成验证码
        String code = StrUtils.getRandomString(4);
        // 用户验证码逻辑判断
        String  codeInRedis  = (String) redisTemplate.opsForValue().get(phone+":"+codeType);
        // 不是第一次发送
        if(codeInRedis!=null){
            // 获取到发送时间
            String oldTime = codeInRedis.split(":")[1];
            if( System.currentTimeMillis()-Long.valueOf(oldTime)<60*1000){
                // 一分钟内的重复请求不合法
                throw new RuntimeException("你酱紫重复验证?");
            } else{ // 网络演示已经发送了验证码
                code=codeInRedis.split(":")[0];
            }
        }
        // 发送验证码
        /*SmsUtils.send(phone,code);*/

        // 使用redis储存验证码
        String codeTime=code+":"+System.currentTimeMillis();
        redisTemplate.opsForValue().set(phone+":"+codeType,codeTime,5, TimeUnit.MINUTES);
        System.out.println("本次的验证码为："+code);
    }
}
